const fs = require('fs');
const path = require('path');
const pinyin = require('pinyin');
const { imageSizeFromFile } = require('image-size/fromFile')

// 获取文件名的拼音
function getPinyin(fileName) {
  // 提取文件名中的中文部分并转换为拼音
  const match = fileName.match(/[\u4e00-\u9fa5]+/g); // 匹配中文字符
  if (match) {
    return match.map(word => pinyin(word, { style: pinyin.STYLE_NORMAL }).join('')).join('');
  }
  return ''; // 如果没有中文，返回空字符串
}

async function uploadUrls(projectName) {

  // 读取图片文件夹路径
  const projectFolder = path.join(__dirname, '../../projects', projectName);
  const imageFolder = path.join(projectFolder, 'images');

  // 读取文件夹中的所有文件
  const files = fs.readdirSync(imageFolder);


  // 示例代码：过滤有效的图片文件并排序
  const imageFiles = files
    .filter(file => file.toLowerCase().endsWith('.jpg') || 
      file.toLowerCase().endsWith('.png')
    ).sort((a, b) => {
      const numA = a.match(/^\d+/);
      const numB = b.match(/^\d+/);

      // 1. 数字开头的文件名排序
      if (numA && numB) {
        return parseInt(numA[0]) - parseInt(numB[0]);
      } else if (numA) {
        return -1;
      } else if (numB) {
        return 1;
      }

      // 2. 字母开头的文件名排序
      const alphaA = a.match(/^[a-zA-Z]/);
      const alphaB = b.match(/^[a-zA-Z]/);

      if (alphaA && alphaB) {
        return a.localeCompare(b);
      } else if (alphaA) {
        return -1;
      } else if (alphaB) {
        return 1;
      }

      // 3. 中文开头的文件名按拼音排序
      const pinyinA = getPinyin(a);
      const pinyinB = getPinyin(b);

      if (pinyinA && pinyinB) {
        return pinyinA.localeCompare(pinyinB);
      }

      return 0;
    });

  let index = 0;
  const urlData = [];

  for (const file of imageFiles) {
    const filePath = path.join(imageFolder, file);
    console.log('Processing file:', filePath);

    try {
      // 获取图片的尺寸
      const dimensions = await imageSizeFromFile(filePath);

      // 检查 dimensions 是否有效并提取 width 和 height
      const width = dimensions.width || 0;  // 默认值为0
      const height = dimensions.height || 0; // 默认值为0

      // 将数据推入 urlData 数组
      urlData.push({
        index: index++,
        file: path.basename(filePath),
        url: '',
        width,  // 存储宽度
        height, // 存储高度
      });
    } catch (error) {
      console.error('Error processing file:', filePath, error);
    }
  }

  // 更新urls.json
  fs.writeFileSync(
    path.join(projectFolder, 'urls.json'),
    JSON.stringify(urlData, null, 2 )
  );
}

module.exports = uploadUrls;
